|
|
|
Lab 2 -- Structural VHDL
Part
1
Цел |
Усвояване
на техники за разработка на структурни VHDL
модели. |
Задание
|
Да се разработи и верифицира структурен VHDL модел
на двубитов суматор.
Входните операнди на суматора са двубитовите числа A и
B и входен пренос CIN (фигура 1 ). Резултатът е двубитова сума S и
изходен пренос COUT.
Структурният модел на двубитовия суматор де бъде
изграден от два еднобитови
суматора. |
Задача 1. Data-flow модел
на еднобитов суматор
Да се разработи модел на еднобитов суматор (фигура 1) като
се използва поведенческо описание тип Data-flow (виж указанието в края на
задачата). Името на модела трябва да бъде ADDER1, а имената на портовете -
както е указано на схемата.
|

|
|
Фигура 1-- Принципна схема на пълен суматор |
Закъсненията на елементите са както следва: XOR - 5ns, AND -
5ns, OR - 7ns.
Докажете корекността на разработения модел посредством VHDL
симулация.
 |
Data-flow стил
Стилът Data-flow е разновидност на
поведенческото описание при която се използват конкурентни
оператори за присвояване вместо оператори process.
По-долу е дадена схема и съответното
й data-flow описание на D-тригер.
<да се допише> |
Задача 2 -- Структурен
модел на двубитов суматор
Блоковата схема на двубитов суматор е показана на фигура
2.
На фигура 3 е дадено описание на сигналите и част от
таблицата на истинност. Сигналите A0 и A1 представляват съответно младшия
и старшия бит на числото A. По аналогичен начин са означени и битове на
числата B и S.
Структурния VHDL модел на суматора е даден на фигура 4 и във
файла adder2.vhd
.
|

|
|
Фигура 2 -- Блокова схема на двубитов суматор |
| Операнд А |
Операнд B |
Входен пренос |
Сума S |
Изходен
пренос |
| старши бит |
младши бит |
старши бит |
младши бит |
|
старши бит |
младши бит |
|
|
A1 |
A0 |
B1 |
B0 |
CIN |
S1 |
S0 |
COUT |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
|
... |
|
|
|
|
|
|
|
|
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
| |
|
|
|
|
|
|
|
|
Фигура 3 -- Описание на сигналите и частична
таблица на истинност на двубитов
суматор |
library IEEE;
use IEEE.std_logic_1164.all;
entity ADDER2 is
port (A0, B0, A1, B1, CIN : in std_logic; S0, S1, COUT : out std_logic);
end ADDER2;
architecture STRUCTURAL of ADDER2 is
component ADDER1
port (X, Y, CIN: in std_logic; SUM, COUT: out std_logic);
end component;
U1: ADDER1 port map (X=>A0, Y=>B0, CIN=>CIN, SUM=>S0, COUT=>C1);
U2: ADDER1 port map (X=>A1, Y=>B1, CIN=>C1, SUM=>S1, COUT=>COUT);
|
|
Фигура 4
-- Структурен VHDL модел на двубитов суматор.
|
Тестовата установка за симулация на модела е дадена на
фигура 5 и в addertst.vhd.
Добавете към тестовата установка още въздействия, които да
изчерпят всички възможни комбинации от входни данни на суматора.
Симулирайте двубитовия суматор и проверете коректността му.
Определете бързодействието на суматора.
library IEEE;
use IEEE.std_logic_1164.all;
entity ADDER2_TEST is
end ADDER2_TEST;
architecture TESTER of ADDER2_TEST is
component TESTED_MODEL
port (A0, B0, A1, B1, CIN: in std_logic; S0, S1, COUT: out std_logic);
end component;
signal A0, B0, A1, B1, CIN, S0, S1, COUT: std_logic;
UUT: TESTED_MODEL port map
(A0=>A0, B0=>B0, A1=>A1, B1=>B1, CIN=>CIN, S0=>S0, S1=>S1, COUT=>COUT);
STM: process begin
A0 <='0'; A1 <='0'; B0 <='0'; B1 <='0'; CIN <='0';
wait for 100 ns;
A0 <='0'; A1 <='0'; B0 <='0'; B1 <='0'; CIN <='1';
wait for 100 ns;
A0 <='0'; A1 <='0'; B0 <='0'; B1 <='1'; CIN <='0';
wait for 100 ns;
A0 <='1'; A1 <='1'; B0 <='1'; B1 <='1'; CIN <='1';
wait for 100 ns;
end process STM;
|
|
Фигура 5
-- Тестова установка за двубитов суматор.
|
Задача 3 -- Структурен модел на
брояч
Да се проектира структурен VHDL модел ма четирибитов
двоичен реверсивен брояч (фигура 6).
|
|
|
Фигура 6 -- Символ на
брояч |
Типът и функциите на входните и изходните сигнали са
следните:
| Сигнал |
Описание |
| Q0 - Q3 |
Изходи. Показват състоянието на брояча и се изменят от
0000 до 1111 |
| CLOCK |
Вход за тактов сигнал. Превключ-ването на брояча става
по нарастващия фронт |
| RESET |
Вход за нулиране. При високо ниво на този вход броячът
преминава в състояание 0000 синхронно с тактовия сигнал |
| UP/DOWN |
Вход за управление на режима. При високо ниво на този
вход броячът е в режим на събиране, а при ниско - в режим на
изваждане |
| CIN |
Входен пренос. Броячът променя състоянието си само
когато на този вход е подадено високо ниво
|
| COUT |
Изходен пренос. Когато броячът преминава от състояние
1111 в състояние 0000 (режим на събиране) или от 0000 в 1111 (режим
на изваждане) на този изход се установява 1 в продължение на един
период на тактовия сигнал. CIN и COUT се използват за каскадно
свързване на няколко брояча |
| |
В структурния модел на брояча да се използват
компоненти от следната библиотека (lib1.vhd):
| Име на компонента |
Описание |
Портове |
| LIBXOR |
XOR |
A, B: in std_logic; Y:
out std_logic |
| LIBDFF |
D-тригер, управляван по
фронт |
D, CK: in std_logic; Q,
QZ: out std_logic) |
| LIBINV |
инвертор |
A: in std_logic; Y: out
std_logic |
| LIBMUX21 |
мултиплексор 2 x 1 |
A, B, S: in std_logic; Y:
out std_logic |
| LIBAN2 |
AND |
A, B: in std_logic; Y:
out std_logic |
| |
Да се проектира тестова установка и чрез симулация да се
докаже работоспособността на схемата.
--- Край на Lab2
--- |